#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <glm\glm.hpp>

extern "C" {
#include "color.h"
}

using namespace glm;
//using D65 as default illuminant
class FCG_T1
{     
   std::vector<vec3> XYZGamut;
   ivec2 setSize;
   vec3 *XYZSet;
   vec3 *XYZNSet;
   vec3 *RGBSet;
   vec3 *sRGBSet;
   vec3 *LabSet;
   void init (); //process XYZContour
public:
   FCG_T1 ();
   float* genSpec (int delta);
   void moveSpec (float *spec, int delta, int pos);
   void buildXYZVisibleGamut ();
   vec3 getXYZ (float* spec); //interval of lambda = [380,780]
   //vec3 getXYZDefault (void); //default spectrum and deltaLambda = 1   
   vec3 getXYZtoRGB (vec3 vXYZ);
   vec3 getXYZtoSRGB (vec3 vXYZ);
   vec3 getXYZtoLab (vec3 vXYZ);
   vec3 getSRGBtoXYZ (vec3 vRGB);
   vec3 *getXYZSet();
   vec3 *getXYZNSet();
   vec3 *getRGBSet();
   vec3 *getSRGBSet();
   vec3 *getLabSet();
   ivec2 getSetSize ();
   ~FCG_T1 ();
};

